This page has been superceded by a wiki version of this example: DateLocalizationUsingVersionExample



/*



locales2.d



Author:  Justin C Calvarese

Date:    October 7, 2003

License: Public Domain



Demonstrates using version() to handle different locales.



Compile for the United States locale:
dmd locales.d -version=UNITED_STATES



Compile for the Canadian (English) locale:
dmd locales.d -version=CANADIAN_ENGLISH



These date formats are based on 

"docs.sun.com: International Language Environments Guide"

http://docs.sun.com/db/doc/806-6642/6jfipqu57?a=view



*/





import std.string;





char[] dateString(byte day, byte month, int yr)

{ 

    int twoDigitYr = yr % 100;

    

    version(CANADIAN_ENGLISH) return leadingZeros(day, 2) ~ "/" ~ leadingZeros(month, 2) ~ "/" ~ leadingZeros(twoDigitYr, 2);

    version(DANISH)           return toString(yr) ~ "-" ~ leadingZeros(month, 2) ~ "-" ~ leadingZeros(day, 2);

    version(FINNISH)          return leadingZeros(day, 2) ~ "." ~ leadingZeros(month, 2) ~ "." ~ toString(yr);

    version(FRENCH)           return leadingZeros(day, 2) ~ "/" ~ leadingZeros(month, 2) ~ "/" ~ toString(yr);

    version(GERMAN)           return toString(yr) ~ "-" ~ leadingZeros(month, 2) ~ "-" ~ leadingZeros(day, 2);

    version(ITALIAN)          return leadingZeros(day, 2) ~ "/" ~ leadingZeros(month, 2) ~ "/" ~ leadingZeros(twoDigitYr, 2);

    version(NORWEGIAN)        return leadingZeros(day, 2) ~ "-" ~ leadingZeros(month, 2) ~ "-" ~ leadingZeros(twoDigitYr, 2);

    version(SPANISH)          return leadingZeros(day, 2) ~ "-" ~ leadingZeros(month, 2) ~ "-" ~ leadingZeros(twoDigitYr, 2);

    version(SWEDISH)          return toString(yr) ~ "-" ~ leadingZeros(month, 2) ~ "-" ~ leadingZeros(day, 2);

    version(GREAT_BRITAIN)    return leadingZeros(day, 2) ~ "/" ~ leadingZeros(month, 2) ~ "/" ~ leadingZeros(twoDigitYr, 2);

    version(UNITED_STATES)    return leadingZeros(month, 2) ~ "-" ~ leadingZeros(day, 2) ~ "-" ~ leadingZeros(twoDigitYr, 2);   

    version(THAI)             return leadingZeros(day, 2) ~ "/" ~ leadingZeros(month, 2) ~ "/" ~ toString(yr);      

}





char[] leadingZeros(byte num, byte digits)

/* also in currency.d and with.d */

{ 

    char[] buffer;

    byte diff;

    

    buffer = toString(num);

    if (buffer.length < digits) 
    {
        diff = digits - buffer.length;

        for(int i=0; i < diff; i++)

          buffer = "0" ~ buffer;

    } 

    return buffer;

}





int main()

{ 

    printf("%.*s\n", dateString(24, 8, 2001));

    return 0;

}